package com.dayu.tcp.protocol;

/**
 * @author yehangtech
 * @date 2024/4/7 22:13
 * @description K1协议制定。包括：魔术、协议版本、数据包的业务标识、数据包的sequenceId、消息体的序列化方式、消息体是否压缩、消息体是否加密
 * 总的固定字节数：4+4+4+8+1+1+1 = 23
 */
public class K1Protocol {
    /**
     * 引导/魔术 4字节
     */
    public static final byte[] MAGIC = new byte[]{(byte) 0x81, (byte) 0x82, (byte) 0x83, (byte) 0x84};

    /**
     * 协议版本 4字节
     */
    public static final int VERSION = 1;

    /**
     * 数据包的业务标识 4字节
     * 需要自定义：-1为心跳包
     */
    public static final int MESSAGE_TYPE_HEARTBEAT = -1;

    public static final int MESSAGE_TYPE_RESTFUL_REQUEST = 1;

    public static final int MESSAGE_TYPE_RESTFUL_RESPONSE = 2;

    /**
     * 数据包的sequenceId 8字节
     * 需要自定义：-1为心跳包专用的id
     */
    public static final long SEQUENCE_ID_HEARTBEAT = -1L;

    /**
     * 消息体的序列化方式 1字节
     * 0X00-json 0X01-file 0X02-pb
     */
    public static final byte SERIALIZER_JSON = 0X00;

    public static final byte SERIALIZER_FILE = 0X01;

    public static final byte SERIALIZER_PB = 0X02;

    /**
     * 消息体压缩方式 1字节
     * 0X00-不压缩 0X01-gzip
     */
    public static final byte COMPRESS_NONE = 0X00;

    public static final byte COMPRESS_GZIP = 0X01;

    /**
     * 消息体加密方式 1字节
     * 0X00-不加密 0X01-AES加密
     */
    public static final byte ENCRYPT_NONE = 0X00;

    public static final byte ENCRYPT_AES = 0X01;

    /**
     * 内存对齐 5字节
     */
    public static final byte[] EMPTY = new byte[]{(byte) 0x91, (byte) 0x92, (byte) 0x93, (byte) 0x94, (byte) 0x95};
}
